<?php
class UsuariosController extends AppController {

	var $name = 'Usuarios';
	var $components = array (
		'Pagination',
		'Acl'
	);
	var $helpers = array (
		'Html',
		'Form',
		'Accessibility',
		'Pagination'
	);
	var $uses = array (
		'Usuario',
		'Cidade',
		'Entidade',
		'Funcionario'
	);

	function beforeFilter() {
		//echo "oi";

	}

	/*** Métodos de gerenciamento de logins ***/

	function checkLogin() {
		if ($this->Session->check('logou') == true) {
			if ($this->Session->read('logou') == 1) {
				return true;
			} else {
				unset ($_SESSION['mensagem']);
				if (!array_key_exists('mensagem', $_SESSION)) {
					$_SESSION['mensagem']['error'][] = 'Você não está logado no site';
				}
				//$this->redirect('/usuarios/login');
				return false;
			}
		}
	}

	function login() {
		if (!empty ($this->data)) {

			// Defininido condições de busca do login
			$conditions = array (
				'Usuario.login' => $this->data['Usuario']['login']
			);
			$fields = array (
				"Usuario.id",
				"Usuario.login",
				"Usuario.senha",
				"Usuario.unidade_id",
			);

			// Buscando usuário no BD
			$someone = $this->Usuario->find($conditions, $fields);

			// Verificando se o login e senha estão corretos
			if (!empty ($this->data["Usuario"]["senha"]) && $someone["Usuario"]["senha"] == $this->data["Usuario"]["senha"]) {

				$this->Session->renew();
				//Setando variáveis de sessão
				$this->Session->write("Usuario", $someone);
				$this->Session->write("usuario_id", $someone["Usuario"]["id"]);

				$conditions = array (
					'Funcionario.usuario_id' => $someone["Usuario"]["id"]
				);

				$func = new Funcionario();
				$funcionario = $func->find($conditions);

				if (!empty ($funcionario)) {

					$this->Session->write("unidade_id", $funcionario["Unidade"]["id"]);
					$this->Session->write("entidade_id", $funcionario["Unidade"]["entidade_id"]);
					$this->Session->write("nome", $funcionario["Funcionario"]["nome"]);
					$this->Session->write("logou", 1);
					$this->Session->write("permissao",$funcionario["Usuario"]["permissao_id"]);
					$this->redirect("/");
				}

			} else {
				$this->Session->write("logou", 0);
				$this->redirect("/usuarios/login");
			}
		}
	}

	function logout() {
		// Limpando variáveis de sessão
		$this->Session->delete("Usuario");
		$this->Session->delete("usuario_id");
		$this->Session->delete("unidade_id");
		$this->Session->delete("entidade_id");
		$this->Session->destroy();
		$this->redirect("/usuarios/login");
	}

	/*** Métodos de visualização de usuários ***/

	function index() {
		$this->set('title', 'Usuários');

		$unidades = $this->getUserUnidades();

		$elements = array ();
		foreach ($unidades as $e) {
			array_push($elements, "Usuario.unidade_id = " . $e['Unidade']['id']);
		}

		$condition = array (
			'OR' => $elements
		);
		$usuarios = $this->Usuario->findAll($condition);
		$this->set('usuarios', $usuarios);

		list ($order, $limit, $page) = $this->Pagination->init(null);

		// Para uso quando houver permissoes

		/*
		// Encontrando todos os usuários do sistema (modo admin)
		$usuarios = $this->Usuario->findAll($conditions, NULL, $order, $limit, $page); // Extra parameters added
		*/

		/*
		// Encontrando usuarios da unidade atual (modo restrito)
		$usuarios = $this->Usuario->findAllByUnidade_id($this->getUnidade());
		$this->set('usuarios',$usuarios);
		list($order,$limit,$page) = $this->Pagination->init(null);
		*/

	}

	function view($id = null) {
		// se o $id não foi fornecido, redireciona para a listagem de alunos
		if (!$id) {
			$this->redirect('/usuarios');
		}
		$this->set('title', 'Visualizar usuario');
		$this->Usuario->id = $id;
		$this->set('usuario', $this->Usuario->read());
	}

	/*** Métodos de manutenção de usuário ***/

	function add() {
		if ($this->checkLogin() == true) {

			$this->set('title', 'Cadastrar usuário');

			// Preenchendo a lista de cidades para cadastro
			$this->set('cidades', $this->Cidade->generateList(null, null, null, '{n}.Cidade.id', '{n}.Cidade.nome'));

			// Verificando se os dados foram fornecidos
			if (!empty ($this->data)) {
				$usuario = $this->Session->read("Usuario");
				$this->data['Usuario']['unidade_id'] = $usuario['unidade_id'];

				if ($this->Usuario->save($this->data)) {
					/* Criando requisitante de acesso */
					$aro = new Aro();
					$aro->create($this->Usuario->id, null, $this->data['Usuario']['login']);
					$_SESSION['mensagem']['success'][] = 'Usuário cadastrado com sucesso!';

				} else {
					$_SESSION['mensagem']['error'][] = 'Erro ao tentar cadastrar o usuário.';
				}
				$this->redirect('/usuarios');
			}
		}
	}

	function edit($id = null) {
		if (!$id) {
			$this->redirect('/usuarios/');
		}

		$this->set('title', 'Editar Usuários');
		$this->Usuario->id = $id;
		$this->set('cidades', $this->Cidade->generateList(null, null, null, '{n}.Cidade.id', '{n}.Cidade.nome'));
		if (empty ($this->data)) {
			$this->data = $this->Usuario->read();
		} else {
			if ($this->Usuario->save($this->data['Usuario'])) {
				$_SESSION['mensagem']['success'][] = 'Usuário alterado com sucesso!';
			} else {
				$_SESSION['mensagem']['error'][] = 'Erro ao tentar alterar o usuário.';
			}
			$this->redirect('/usuarios');
		}

		// obtém os dados da usuário
		$usuario = $this->Usuario->find(array (
			'`Usuario`.id' => $id
		));

		// passa os dados para a view
		$this->set('usuario', $usuario);

	}

	function delete($id) {
		// se o $id não foi fornecido, redireciona para a listagem
		if (!$id) {
			$this->redirect('/usuarios');
		}

		if ($this->Usuario->del($id)) {
			$_SESSION['mensagem']['success'][] = 'Usuário excluído com sucesso!';
		} else {
			$_SESSION['mensagem']['error'][] = 'Erro ao tentar excluir o usuário.';
		}
		// redireciona para a listagem de usuários
		$this->redirect('/usuarios');
	}
}

?>